#ifndef LILY_TASK
#define LILY_TASK

#ifdef __cplusplus
extern "C" {
#endif


typedef int32_t(*Tasks_def)();//return 0 meas task ended
typedef int32_t(*TasksArg_def)(void*);//add a Task with a parameter
typedef int32_t (*Cmdline_def)(int32_t argc, char* argv[]);

extern volatile uint32_t _tp_front, _tp_rear;
#ifndef Tasks_LEN
#define Tasks_LEN 32
#endif

extern Tasks_def _tp_tasks_[Tasks_LEN];

void tp_addTask(Tasks_def task);
void tp_endTask(Tasks_def task);
uint32_t tp_hadTask(Tasks_def task);
void tp_endTaskAt(char index);

void tp_run_tasks(void);
void tp_run_tasks_once();
void tp_addTaskArg(TasksArg_def f, void* arg);


#ifdef __cplusplus
}
#endif

#endif // LILY_TASK
